Include CSD titlebar in focus chain
authorMatthias Clasen <mclasen@redhat.com>
Mon, 16 Sep 2013 18:26:08 +0000 (14:26 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 16 Sep 2013 18:38:38 +0000 (14:38 -0400)
At least for header bars, there's often application controls
in this area, which should be included in the focus chain.
We make it so that the initial focus avoids the titlebar,
but tabbing around will eventually get there.

https://bugzilla.gnome.org/show_bug.cgi?id=708067

gtk/gtkwindow.c

index 50ed413162ed44e1aad3aa74108418a77de925a6..93422cbbd96a092ae1db732f449cd5cbf55afb09 100644 (file)
@@ -7555,7 +7555,7 @@ gtk_window_focus (GtkWidget        *widget,
   bin = GTK_BIN (widget);
 
   old_focus_child = gtk_container_get_focus_child (container);
-  
+
   /* We need a special implementation here to deal properly with wrapping
    * around in the tab chain without the danger of going into an
    * infinite loop.
@@ -7587,8 +7587,17 @@ gtk_window_focus (GtkWidget        *widget,
       gtk_window_set_focus (GTK_WINDOW (container), NULL);
     }
 
-  /* Now try to focus the first widget in the window */
-  child = gtk_bin_get_child (bin);
+  /* Now try to focus the first widget in the window,
+   * taking care to hook titlebar widgets into the
+   * focus chain.
+  */
+  if (priv->title_box != NULL &&
+      old_focus_child != NULL &&
+      priv->title_box != old_focus_child)
+    child = priv->title_box;
+  else
+    child = gtk_bin_get_child (bin);
+
   if (child)
     {
       if (gtk_widget_child_focus (child, direction))